package my.spring.ioc.bean;

/**
 * 将BeanDefinition注入到BeanDefinition容器
 * @author fengbo
 * @date 2018/6/19
 */
public interface BeanDefinitionRegistry {

    /**
     * 将BeanDefinition注册到容器
     * @param beanName Bean注解的value值
     * @param beanDefinition value
     */
    void registerBeanDefinition(String beanName, BeanDefinition beanDefinition);

    /**
     * 根据beanName删除BeanDefinition
     * @param beanName key
     */
    void removeBeanDefinition(String beanName);

    /**
     * 根据beanName获取BeanDefinition
     * @param beanName key
     * @return BeanDefinition
     */
    BeanDefinition getBeanDefinition(String beanName);

    /**
     * 根据beanName判断容器中是否包含BeanDefinition
     * @param beanName key
     * @return BeanDefinition
     */
    boolean containsBeanDefinition(String beanName);

    /**
     * 获取BeanDefinition容器中所有的key
     * @return keys
     */
    String[] getDefinitionNames();

    /**
     * 获取容器BeanDefinition的数量
     * @return 数量
     */
    int getBeanDefinitionCount();
}
